2
2
.
.
5
5
.
.
5
5
@
@
I
I
d
d
I
I
n
n
f
f
o
o
In this tutorial we will use JPA's @Id Annotation to indicate that Property represents Primary Key.
Hibernate needs this information to be able to store Entities as Records in DB.
You can manually set id when creating Entities but in this example ids are automatically generated by DB Sequence.
Compared to previous example we will only
add following line to PersonEntity.java @GeneratedValue(strategy = GenerationType.IDENTITY)
remove following line from MyController.java personEntity.id = 1;
JPA Annotations can only be used on SQL DBs (H2, MySQL, Oracle) and can't be used on NoSQL DBs (MongoDB).
Application Schema [Results]
Spring Boot Starters
GROUP
DEPENDENCY
DESCRIPTION
Web
Spring Web
Enables @Controller, @RequestMapping and Tomcat Server
SQL
Spring Data JPA
Enables @Entity and @Id
SQL
H2 Database
Enables in-memory H2 DB
MyController
http://localhost:8080/addPerson
addPerson()
PersonEntity
P
P
r
r
o
o
c
c
e
e
d
d
u
u
r
r
e
e
Create Project: entity_entity (add Spring Boot Starters from the table)
Edit File: application.properties (specify H2 DB name & enable H2 Web Console)
Create Package: entities (inside main package)
Create Class: PersonEntity.java (inside package entities)
Create Package: repositories (inside main package)
Create Interface: PersonRepository.java (inside package repositories)
Create Package: controllers (inside main package)
Create Class: MyController.java (inside package controllers)
application.properties
# H2 DATABASE
spring.datasource.url = jdbc:h2:mem:testdb
spring.h2.console.enabled = true
PersonEntity.java
package com.ivoronline.springboot.entity_annotation_id.entities;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class PersonEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Integer id;
public String name;
public Integer age;
}
PersonRepository.java
package com.ivoronline.springboot.entity_annotation_id.repositories;
import com.ivoronline.entity_entity.entities.PersonEntity;
import org.springframework.data.repository.CrudRepository;
public interface PersonRepository extends CrudRepository<PersonEntity, Integer> { }
MyController.java
package com.ivoronline.springboot.entity_annotation_id.controllers;
import com.ivoronline.entity_entity.entities.PersonEntity;
import com.ivoronline.entity_entity.repositories.PersonRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class MyController {
@Autowired
PersonRepository personRepository;
@ResponseBody
@RequestMapping("/addPerson")
public String addPerson() {
//CREATE ENTITY OBJECT
PersonEntity personEntity = new PersonEntity();
personEntity.name = "John";
personEntity.age = 20;
//STORE ENTITY OBJECT INTO DB
personRepository.save(personEntity);
//RETURN SOMETHING TO BROWSER
return personEntity.name + " was stored into DB";
}
}
R
R
e
e
s
s
u
u
l
l
t
t
s
s
http://localhost:8080/addPerson
Open H2 Console: http://localhost:8080/h2-console - Connect - PERSON_ENTITY - Run
Application Structure
pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>